// Copyright (C) 2023 即时通讯网(52im.net) & Jack Jiang.
// The RainbowChat Project. All rights reserved.
// 
// 【本产品为著作权产品，合法授权后请放心使用，禁止外传！】
// 【本次授权给：<北京小羊驼科技有限公司>，授权编号：<NT231212144350>，代码指纹：<A.702363430.550>，技术对接人微信：<ID: wxid_wbyootvkdcgj22>】
// 【授权寄送：<收件：苏先生、地址：北京市大兴区北京密码西区6号楼1单元301、电话：18613885610、邮箱：bd@huiyuanxiang-inc.com>】
// 
// 【本系列产品在国家版权局的著作权登记信息如下】：
// 1）国家版权局登记名(简称)和权证号：RainbowChat    （证书号：软著登字第1220494号、登记号：2016SR041877）
// 2）国家版权局登记名(简称)和权证号：RainbowChat-Web（证书号：软著登字第3743440号、登记号：2019SR0322683）
// 3）国家版权局登记名(简称)和权证号：RainbowAV      （证书号：软著登字第2262004号、登记号：2017SR676720）
// 4）国家版权局登记名(简称)和权证号：MobileIMSDK-Web（证书号：软著登字第2262073号、登记号：2017SR676789）
// 5）国家版权局登记名(简称)和权证号：MobileIMSDK    （证书号：软著登字第1220581号、登记号：2016SR041964）
// * 著作权所有人：江顺/苏州网际时代信息科技有限公司
// 
// 【违法或违规使用投诉和举报方式】：
// 联系邮件：jack.jiang@52im.net
// 联系微信：hellojackjiang
// 联系QQ号：413980957
// 授权说明：http://www.52im.net/thread-1115-1-1.html
// 官方社区：http://www.52im.net
//package com.x52im.rainbowchat.logic.sns;
//
//import android.app.Activity;
//import android.graphics.Bitmap;
//import android.graphics.Color;
//import android.graphics.drawable.ColorDrawable;
//import android.graphics.drawable.Drawable;
//import android.view.View;
//import android.view.ViewGroup;
//import android.widget.AdapterView;
//import android.widget.ImageView;
//import android.widget.LinearLayout;
//import android.widget.ListView;
//import android.widget.TextView;
//
//import com.eva.android.widget.DataLoadableActivity;
//import com.eva.android.widget.AListAdapter2;
//import com.eva.android.widget.AsyncBitmapLoader;
//import com.eva.android.widget.AsyncBitmapLoader.ImageCallBack;
//import com.eva.android.widget.PaginationView;
//import com.eva.android.widget.PaginationView.OnPullDownListener;
//import com.eva.epc.common.util.CommonUtils;
//import com.eva.framework.dto.DataFromServer;
//import com.x52im.rbchat.R;
//import com.x52im.rainbowchat.http.logic.dto.RosterElementEntity;
//import AvatarHelper;
//import IntentFactory;
//
//import java.util.ArrayList;
//
///**
// * 本类用于显示通过“查找好友”功能查到的数据结果。
// * <p>
// * 支持下拉自动分页显示等。
// * <p>
// * <b>特别说明：</b>20170227日起，在RainbowChat只保留“随机查找”功能后，已去掉
// * 传统的可以分页查看所有用户，以下类中注释掉的代码就是这些作用，但暂时用不上了，
// * 为了简化代码可读性，已注释掉。
// *
// * @author Jason
// * @version 1.0
// */
//public class FindFriendResultActivity extends DataLoadableActivity
//{
//	/** 下拉刷新控件对象 */
//	private PaginationView paginationView = null;
//
//	private ListView friendListView = null;
//	private FriendListAdapter friendListAdapter = null;
//
//    /** 布局：没有消息时的提示 */
//    private LinearLayout llNoAlarms = null;
//
//	private ArrayList<RosterElementEntity> friendInfoList = null;
////	private Object[] toServer = null;
//
//	private OnPullDownListener onPullDownListener = null;
////
////	//传送至服务端的起始
////	private int pageBegin = 1;
////	//传送至服务端的结尾
////	private int pageEnd = 10;
////	//第几页
////	private int pageIndex = FindFriendFormActivity_all.FRIEND_PAGE_BEGIN_INDEX;
////	//加载数量
////	private int pageSize =  FindFriendFormActivity_all.FRIEND_PAGE_BEGIN_SIZE;
//
//	// true表示是是否是随机查找、否则是传统的下拉自动分页拉取所有用户信息
////	private boolean isStrict = false;
//
//	@Override
//	protected void initDataFromIntent()
//	{
//		// 解析从intent中传过来的数据
//		ArrayList intentDatas = IntentFactory.parseFriendInfoListIntent(getIntent());
//		friendInfoList = (ArrayList<RosterElementEntity>) intentDatas.get(0);
////		toServer = (Object[])intentDatas.get(1);
////		if(toServer == null)
////			isStrict = true;
////		else
////			isStrict = false;
//	}
//
//	/**
//	 * 本方法由父类的onCreate()调用，子类可在此方法中实现自已的UI显示逻辑。
//	 */
//	@Override
//	protected void initViews()
//	{
//		customeTitleBarResId = R.id.sns_friend_list_form_titleBar;
//		// 首先设置contentview
//		setContentView(R.layout.sns_friend_result_list);
//		this.setTitle(R.string.sns_friend_list_form_title);
//
//        //列表无数据时的UI提示信息组件
//        llNoAlarms = (LinearLayout)findViewById(R.id.sns_friend_list_form_noAlarmsLL);
//
//		paginationView = (PaginationView) findViewById(R.id.sns_friend_list_form_listView);
//		friendListView = paginationView.getListView();
//
//		friendListAdapter = new FriendListAdapter(this);
//		friendListAdapter.setListData(friendInfoList);
//		friendListView.setAdapter(friendListAdapter);
//
//		// 列表item的分隔线
//		friendListView.setDivider(new ColorDrawable(Color.rgb(221, 221, 221)));
//		friendListView.setDividerHeight(1);
//
//		onPullDownListener = new OnPullDownListener()
//		{
//			@Override
//			public void onRefresh()
//			{
//			}
//
//			/** 刷新事件接口 这里要注意的是获取更多完 要关闭 更多的进度条 notifyDidMore() **/
//			@Override
//			public void onMore()
//			{
////				if(!isStrict)
////					new SearchFriendsList().execute(toServer);
//			}
//		};
//
////		if(isStrict)
//		{
//			paginationView.enableAutoFetchMore(false, 1);
//			// 隐藏并且禁用自动获取更多
//			paginationView.setHideFooter();
//			// 隐藏并且禁用头部刷新
//			paginationView.setHideHeader();
//
//			paginationView.setOnPullDownListener(onPullDownListener);
//		}
////		else
////		{
////			// 设置可以自动获取更多 滑到最后一个自动获取 改成false将禁用自动获取更多
////			paginationView.enableAutoFetchMore(false, 1);
////			// 显示并启用自动获取更多
////			paginationView.setShowFooter();
////			// 隐藏并且禁用头部刷新
////			paginationView.setHideHeader();
////			paginationView.setOnPullDownListener(onPullDownListener);
////
////			if(friendInfoList.size() < 10)
////				paginationView.setNoMoreFooter();
////
////			paginationView.notifyDidMore();
////		}
//
//		this.setLoadDataOnCreate(false);
//	}
//
//	/**
//	 * 本方法由父类的onCreate()调用，子类可在此方法中为各UI功能组件增加事件临听。
//	 */
//	@Override
//	protected void initListeners()
//	{
//		friendListView.setOnItemClickListener(new AdapterView.OnItemClickListener()
//		{
//			@Override
//			public void onItemClick(AdapterView<?> arg0, View view, int position, long arg3)
//			{
//				RosterElementEntity friendInfo = friendInfoList.get(position - 1);
//				FindFriendResultActivity.this.startActivity(
//						IntentFactory.createFriendInfoIntent(FindFriendResultActivity.this, friendInfo));
//			}
//		});
//	}
//
//	@Override
//	protected DataFromServer queryData(String... arg0)
//	{
//		return null;
//	}
//
//	@Override
//	protected void refreshToView(Object arg0)
//	{
//	}
//
////	public class SearchFriendsList extends DataLoadingAsyncTask<Object, Integer, DataFromServer>
////	{
////		public SearchFriendsList()
////		{
////			super(FindListFormActivity.this, $$(R.string.general_loading));
////		}
////
////		/**
////		 * 在后台执行查询.
////		 *
////		 * @param parems 外界传进来的参数
////		 * @return 查询结果，将传递给onPostExecute(..)方法
////		 */
////		@Override
////		protected DataFromServer doInBackground(Object... parems)
////		{
////
////			pageBegin = pageIndex * pageSize + 1;
////			// 加一页
////			pageIndex++;
////			pageEnd = pageIndex * pageSize;
////
////			toServer[3] = pageBegin;
////			toServer[4] = pageEnd;
////
////			// 提交请求到服务端
////			DataFromClient dataFromClient = DataFromClient.n()
////					.setProcessorId(MyProcessorConst.PROCESSOR_LOGIC)
////					.setJobDispatchId(JobDispatchConst.LOGIC_SNS)
////					.setActionId(SysActionConst.ACTION_APPEND4)
////					// 要接收邀请的邮件地址
////					.setNewData(toServer);
////			DataFromServer dfs=HttpServiceFactory4AImpl.getInstance().getDefaultService().sendObjToServer(dataFromClient);
////			return dfs;
////		}
////
////		//* 到了本方法里即意味着与服务端的交互成功了
////		@Override
////		protected void onPostExecuteImpl(Object result)
////		{
////			if(result != null)
////			{
////
////				ArrayList<RosterElementEntity> friendInfo = (ArrayList<RosterElementEntity>)result;
////
////				if(friendInfo.size() < 10)
////					paginationView.setNoMoreFooter();
////				if(friendInfo.size() == 0)
////				{
////					pageIndex--;
////				}
////				else
////				{
////					friendInfoList.addAll(friendInfo);
////					friendListAdapter.notifyDataSetChanged();
////				}
////			}
////			else
////			{
////				pageIndex--;
////			}
////			// 告诉它获取更多完毕 这个事线程安全的 可看源代码
////			paginationView.notifyDidMore();
////		}
////	}
//
//	/**
//	 * 自定义明细列表的adapter类实现.
//	 */
//	private class FriendListAdapter extends AListAdapter2<RosterElementEntity>
//	{
//		/** 记录选中的ListView的行索引值以备后用（目前是在：单击、长按2类事件中保存了此索引值）. */
//		protected int selectedListViewIndex = -1;
//		private AsyncBitmapLoader asyncLoader = null;
//
//		public FriendListAdapter(Activity context)
//		{
//			super(context, R.layout.sns_friend_result_list_item);
//			this.asyncLoader = new AsyncBitmapLoader(AvatarHelper.getUserAvatarSavedDir(context)+"/");
//		}
//
//		@Override
//		public View getView(final int position, View convertView, ViewGroup parent)
//		{
//			TextView viewNikcName = null;
//			TextView viewUserUid = null;
//			ImageView viewAdavar = null;
//			TextView viewUserUidLabel = null;
//			TextView viewStatus = null;
//
//			// --------------------------------------------------（1）UI初始化
//			//
//			// 当的item布局实例已经存在（不在存，意味着这个item刚好从不可见区移到可见区时）
//			// ** 根据android的列表ui实现，为了节比资源占用，假如列表有100行而可见区显示5行，那么任何时候
//			// ** 这个列表中只会有5个item的UI存在，其它的item都是当被转到可见区时自动把自
//			// ** 已的数据实时地更新列UI上，以便查看，也就是说item的UI并不是与后台数据一
//			// ** 一对应的，所以正如API文档里说的，convertView并不能确保它总能按你的想法保持不为null
//			boolean needCreateItem = (convertView == null);
//			// 正在操作的列表行的数据集
//			final RosterElementEntity rowData = listData.get(position);
//			if (needCreateItem)
//				// 明细item的UI实例化
//				convertView = layoutInflater.inflate(itemResId, null);
//			// item里的操作组件实例
//			viewNikcName = (TextView) convertView.findViewById(R.id.sns_friend_list_form_item_nickname);
//			viewUserUid = (TextView) convertView.findViewById(R.id.sns_friend_list_form_item_uid);
//			viewAdavar = (ImageView)convertView.findViewById(R.id.sns_friend_list_form_item_nickname_imageView);
//			viewUserUidLabel = (TextView)convertView.findViewById(R.id.sns_friend_list_form_item_uidLabel);
//			viewStatus = (TextView) convertView.findViewById(R.id.sns_friend_list_form_item_statusView);
//
//			// ---------------------------------------------------（2）增加事件处理器
//			//
//			// 各操作组件的事件监听器只需要在convertView被实例化时才需要重建（convertView需要被实例化
//			// 当然就意味着它上面的所有操作组件都已经重新新建了）
//			// ** 关于事件处理器的说明：事件处理器的增加其实可以不这么麻烦，直接每getView一次就给组件new一个处理器，
//			// ** 这样做的好处是简单，但显然存在资源浪费（每刷新一次view就新建监听器）。而现在的实现就跟Android的列表
//			// ** 实现原理一样，在切换到下一组item前，监听器永远只有一屏item的数量（刷新时只需要即时刷新对应item的数据到
//			// ** 它的监听器里），这样就节省了资源开销！
//			if (needCreateItem)
//			{
//			}
//
//			// ---------------------------------------------------（3）给UI组件设值，以便显示给用户看
//			//
//			// 设置昵称
//			viewNikcName.setText(rowData.getNickname());
//
//			// 如果用户的个人签名为空，就显示它的UID，否则显示内容为它的个人签名
//			if(!CommonUtils.isStringEmpty((String)rowData.getWhatsUp(),true))
//			{
//				viewUserUidLabel.setVisibility(View.GONE);
//				viewUserUid.setText((String)rowData.getWhatsUp());
//			}
//			else
//			{
//				viewUserUidLabel.setVisibility(View.VISIBLE);
//				viewUserUid.setText(rowData.getUser_uid());
//			}
//
//			// 默认头像
//			viewAdavar.setImageResource(rowData.isMan() ? R.drawable.default_avatar
//					: R.drawable.default_avatar);
//
//			// 设置用户在线状态图标（设置状态文字+图标）
//			Drawable statusImg = null;
//			int statusImgResId = -1;
////			int statusTxtColorResId = -1;
//			if(rowData.isOnline())
//			{
//				statusImgResId = R.drawable.sns_friend_list_form_item_status_online_ico;
////				statusTxtColorResId = R.color.sns_friend_list_form_item_status_txt_color_online;
//				viewStatus.setText(FindFriendResultActivity.this.getString(R.string.sns_friend_list_form_item_status_online));
//			}
//			else
//			{
//				statusImgResId = R.drawable.sns_friend_list_form_item_status_offline_ico;
////				statusTxtColorResId = R.color.sns_friend_list_form_item_status_txt_color_offline;
//				viewStatus.setText(FindFriendResultActivity.this.getString(R.string.sns_friend_list_form_item_status_offline));
//			}
//			// 代码中实现drawLeft图标设置
//			statusImg = FindFriendResultActivity.this.getResources().getDrawable(statusImgResId);
//			statusImg.setBounds(0, 0, statusImg.getMinimumWidth(), statusImg.getMinimumHeight());
//			viewStatus.setCompoundDrawables(statusImg, null, null, null);
////			viewStatus.setTextColor(FindFriendResultActivity.this.getResources().getColor(statusTxtColorResId));
//
//			// 异步加载用户头像：
//			// userAvatarFileName中存放的中该人员的头像存放于服务端的文件名（也将原样用于本地的缓存文件名）为null即表示该人员没有头像
//			if(!CommonUtils.isStringEmpty((String)rowData.getUserAvatarFileName(), true))
//			{
//				//根据图片URL去查找内存缓存有没有对应的Bitmap对象，并传递回调方法，如果没有，则等下载完毕回调
//				Bitmap bitmap = asyncLoader.loadBitmap(viewAdavar
//						// 注意：此下载地址在服务端的逻加上是不管客户有无缓存都会传过来头像文件数据的，但在此处却不需要顾及它，
//						// 因为此处使用的缓存逻辑是独立的：它先判断本地用无该文件，如果没有的时候才会用此URL取头像数据，所以此
//						// URL要一定能取的到头像数据就对了
//						, AvatarHelper.getUserAvatarDownloadURL(context, rowData.getUser_uid())
//						, (String)rowData.getUserAvatarFileName() //, rowData.getUserAvatarFileName()
//						, new ImageCallBack()
//						{
//							@Override
//							public void imageLoad(ImageView imageView, Bitmap bitmap)
//							{
//								// 从网络加载完成用户头像了
//								imageView.setImageBitmap(bitmap);
//
//								// 刷新列表以显示最新头像
//								FriendListAdapter.this.notifyDataSetChanged();
//							}
//						}
//						// 指定生成的Bitmap对象所描述的图片的大小(更小的尺寸将成倍地减小内存消耗)
//						, 140 , 140 // 此头像用于列表中的用户头像，大小参考：sns_friend_list_form_list_item.xml中的@+id/sns_friend_list_form_item_nickname_imageView
//				);
//
//				// 取到头像缓存了，直接设置之
//				if(bitmap != null)
//					viewAdavar.setImageBitmap(bitmap);
//			}
//
//			return convertView;
//		}
//
//		@SuppressWarnings("unused")
//		public int getSelectedListViewIndex()
//		{
//			return selectedListViewIndex;
//		}
//
//		@SuppressWarnings("unused")
//		public void setSelectedListViewIndex(int selectedListViewIndex)
//		{
//			this.selectedListViewIndex = selectedListViewIndex;
//			// this.notifyDataSetChanged();
//		}
//
//        @Override
//        public void notifyDataSetChanged()
//        {
//            super.notifyDataSetChanged();
//            if(this.getCount() <= 0)
//            {
//                llNoAlarms.setVisibility(View.VISIBLE);
//                friendListView.setVisibility(View.GONE);
//            }
//            else
//            {
//                llNoAlarms.setVisibility(View.GONE);
//                friendListView.setVisibility(View.VISIBLE);
//            }
//        }
//	}
//}
